package cn.lili.modules.member.service;

import cn.lili.common.vo.PageVO;
import cn.lili.modules.member.entity.dos.UserAddress;
import cn.lili.modules.member.entity.dto.AddressSearchParams;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 收货地址业务层
 *
 * @author Chopper
 * @since 2020/11/18 9:45 上午
 */
public interface UserAddressService extends IService<UserAddress> {

    /**
     * 根据用户获取用户地址分页列表
     *
     * @param page                分页条件
     * @param addressSearchParams 地址搜索参数
     * @return 用户地址分页列表
     */
    Page<UserAddress> addressPage(PageVO page, AddressSearchParams addressSearchParams);

    /**
     * 根据用户获取用户地址分页列表
     *
     * @param page                分页条件
     * @param addressSearchParams 地址搜索参数
     * @return 用户地址分页列表
     */
    Page<UserAddress> addressPageNoAuth(PageVO page, AddressSearchParams addressSearchParams);

    /**
     * 根据用户获取用户地址分页列表
     *
     * @param addressSearchParams 地址搜索参数
     * @return 用户地址分页列表
     */
    UserAddress getAddressByMember(AddressSearchParams addressSearchParams);

    /**
     * 根据用户获取用户地址分页列表
     *
     * @param addressSearchParams 地址搜索参数
     * @return 用户地址分页列表
     */
    UserAddress getUserAddressNoAuth(AddressSearchParams addressSearchParams);

    /**
     * 根据地址ID获取当前用户地址信息
     *
     * @param id 地址ID
     * @return 当前用户的地址信息
     */
    UserAddress getUserAddress(String id);


    /**
     * 根据地址ID获取当前用户地址信息
     *
     * @param userId 当前用户Id
     * @return 当前用户的地址信息
     */
    UserAddress getUserDefaultAddress(String userId);

    /**
     * 添加用户收货地址
     *
     * @param userAddress 收货地址
     * @return 操作状态
     */
    UserAddress saveUserAddress(UserAddress userAddress);

    /**
     * 修改用户收货地址信息
     *
     * @param userAddress 收货地址
     * @return 操作状态
     */
    UserAddress updateUserAddress(UserAddress userAddress);

    /**
     * 删除用户收货地址信息
     *
     * @param id 收货地址ID
     * @return 操作状态
     */
    boolean removeUserAddress(String id);

    /**
     * 修改默认地址
     *
     * @param addressId 地址ID
     */
    void updateDefaultAddress(String addressId);
}